<!DOCTYPE html>
<html>

<head>
	<meta charset="utf-8">
	<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
	<meta name="theme-color" content="#33474d">
	<title>失落的乐章</title>
	<link rel="stylesheet" href="/css/style.css" />
	
      <link rel="alternate" href="/atom.xml" title="失落的乐章" type="application/atom+xml">
    
</head>

<body>

	<header class="header">
		<nav class="header__nav">
			
				<a href="/archives" class="header__link">Archive</a>
			
				<a href="/tags" class="header__link">Tags</a>
			
				<a href="/atom.xml" class="header__link">RSS</a>
			
		</nav>
		<h1 class="header__title"><a href="/">失落的乐章</a></h1>
		<h2 class="header__subtitle">技术面前，永远都是学生。</h2>
	</header>

	<main>
		
	<span class="different-posts different-posts_earlier">📖 <a href="/page/4">earlier posts</a> 📖</span>




	<article>
	
		<h1><a href="/2017/10/12/Tomcat/12.tomcat单机多实例/">tomcat单机多实例</a></h1>
	
	<div class="article__infos">
		<span class="article__date">2017-10-12</span><br />
		
		
			<span class="article__tags">
			  	<a class="article__tag-link" href="/tags/Tomcat/">Tomcat</a>
			</span>
		
	</div>

	

	
		<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;需求是： 同一个tomcat服务下，可以访问多个域名。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;先来看看tomcat配置文件server.xml的结构</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div></pre></td><td class="code"><pre><div class="line">&lt;Server&gt;</div><div class="line"></div><div class="line">    &lt;Service name=”xxx”&gt;</div><div class="line"></div><div class="line">        &lt;Host  name=”aaa.com” appBase=”dir1″&gt;</div><div class="line"></div><div class="line">        &lt;/Host&gt;</div><div class="line"></div><div class="line">    &lt;/Service&gt;</div><div class="line"></div><div class="line">&lt;Server&gt;</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;说明：</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Service下面可以定义监听的端口，包含了<host></host>，而<host></host>里面定义虚拟主机，即，定义站点的域名和站点的目录。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;两种方案：</p>
<ol>
<li><p>可以在<service></service>里面定义多个<host></host>，这样就定义了多个站点，但端口不能变。</p>
</li>
<li><p>可以在<server></server>里面定义多个<service></service>，<service></service>里再定义<host></host>，这样做的好处是，可以更改监听端口。</p>
</li>
</ol>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;假设需求为：</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;同一个服务器上跑两个站点</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;www.aaa.com  监听端口是8080</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;www.bbb.com  监听端口是8081</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;配置文件内容为：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div><div class="line">26</div><div class="line">27</div><div class="line">28</div><div class="line">29</div><div class="line">30</div><div class="line">31</div><div class="line">32</div><div class="line">33</div><div class="line">34</div><div class="line">35</div><div class="line">36</div><div class="line">37</div><div class="line">38</div><div class="line">39</div><div class="line">40</div><div class="line">41</div><div class="line">42</div><div class="line">43</div><div class="line">44</div><div class="line">45</div><div class="line">46</div><div class="line">47</div><div class="line">48</div><div class="line">49</div><div class="line">50</div><div class="line">51</div><div class="line">52</div><div class="line">53</div><div class="line">54</div><div class="line">55</div><div class="line">56</div><div class="line">57</div><div class="line">58</div><div class="line">59</div><div class="line">60</div><div class="line">61</div><div class="line">62</div><div class="line">63</div><div class="line">64</div><div class="line">65</div></pre></td><td class="code"><pre><div class="line">&lt;GlobalNamingResources&gt;</div><div class="line">&lt;!– Editable user database that can also be used by</div><div class="line">UserDatabaseRealm to authenticate users</div><div class="line">–&gt;</div><div class="line">&lt;Resource name=”UserDatabase” auth=”Container”</div><div class="line"><span class="built_in">type</span>=”org.apache.catalina.UserDatabase”</div><div class="line">description=”User database that can be updated and saved”</div><div class="line">factory=”org.apache.catalina.users.MemoryUserDatabaseFactory”</div><div class="line">pathname=”conf/tomcat-users.xml” /&gt;</div><div class="line">&lt;/GlobalNamingResources&gt;</div><div class="line"></div><div class="line">&lt;!– A “Service” is a collection of one or more “Connectors” that share</div><div class="line">a single “Container” Note: A “Service” is not itself a “Container”,</div><div class="line">so you may not define subcomponents such as “Valves” at this level.</div><div class="line">Documentation at /docs/config/service.html</div><div class="line">–&gt;</div><div class="line">&lt;Service name=”Catalina”&gt;</div><div class="line"></div><div class="line">&lt;Connector port=”8080″ protocol=”HTTP/1.1″</div><div class="line">connectionTimeout=”20000″</div><div class="line">redirectPort=”8443″ /&gt;</div><div class="line">&lt;Connector port=”8009″ protocol=”AJP/1.3″ redirectPort=”8443″ /&gt;</div><div class="line"></div><div class="line">&lt;Engine name=”Catalina” defaultHost=”localhost”&gt;</div><div class="line"></div><div class="line">&lt;Realm className=”org.apache.catalina.realm.LockOutRealm”&gt;</div><div class="line">&lt;Realm className=”org.apache.catalina.realm.UserDatabaseRealm”</div><div class="line">resourceName=”UserDatabase”/&gt;</div><div class="line">&lt;/Realm&gt;</div><div class="line"></div><div class="line">&lt;Host name=”www.aaa.com” appBase=”webapps”</div><div class="line">unpackWARs=”<span class="literal">true</span>” autoDeploy=”<span class="literal">true</span>”&gt;</div><div class="line"></div><div class="line">&lt;Valve className=”org.apache.catalina.valves.AccessLogValve” directory=”logs”</div><div class="line">prefix=”aaa.com_access” suffix=”.<span class="built_in">log</span>”</div><div class="line">pattern=”%h %l %u %t &amp;quot;%r&amp;quot; %s %b” /&gt;</div><div class="line"></div><div class="line">&lt;/Host&gt;</div><div class="line">&lt;/Engine&gt;</div><div class="line">&lt;/Service&gt;</div><div class="line">&lt;Service name=”aming”&gt;</div><div class="line"></div><div class="line">&lt;Connector port=”8081″ protocol=”HTTP/1.1″</div><div class="line">connectionTimeout=”20000″</div><div class="line">redirectPort=”8443″ /&gt;</div><div class="line"></div><div class="line">&lt;Engine name=”aming” defaultHost=”localhost”&gt;</div><div class="line"></div><div class="line">&lt;Realm className=”org.apache.catalina.realm.LockOutRealm”&gt;</div><div class="line">&lt;Realm className=”org.apache.catalina.realm.UserDatabaseRealm”</div><div class="line">resourceName=”UserDatabase”/&gt;</div><div class="line">&lt;/Realm&gt;</div><div class="line"></div><div class="line">&lt;Host name=”www.bbb.com” appBase=”/data/tomcat”</div><div class="line">unpackWARs=”<span class="literal">true</span>” autoDeploy=”<span class="literal">true</span>”&gt;</div><div class="line"></div><div class="line">&lt;Valve className=”org.apache.catalina.valves.AccessLogValve” directory=”logs”</div><div class="line">prefix=”bbb.com_access” suffix=”.<span class="built_in">log</span>”</div><div class="line">pattern=”%h %l %u %t &amp;quot;%r&amp;quot; %s %b” /&gt;</div><div class="line"></div><div class="line">&lt;/Host&gt;</div><div class="line">&lt;/Engine&gt;</div><div class="line">&lt;/Service&gt;</div><div class="line"></div><div class="line">&lt;/Server&gt;</div></pre></td></tr></table></figure>
	

	

</article>




	<article>
	
		<h1><a href="/2017/10/12/Tomcat/10. tomcat常用功能的配置方法/">tomcat常用功能的配置方法</a></h1>
	
	<div class="article__infos">
		<span class="article__date">2017-10-12</span><br />
		
		
			<span class="article__tags">
			  	<a class="article__tag-link" href="/tags/Tomcat/">Tomcat</a>
			</span>
		
	</div>

	

	
		<h2 id="启动内存参数的配置"><a href="#启动内存参数的配置" class="headerlink" title="启动内存参数的配置"></a>启动内存参数的配置</h2><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;tomcat/bin/catalina.bat 如果是linux 就是 catalina.sh</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;在rem 的后面增加如下参数</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line"><span class="built_in">set</span> JAVA_OPTS= -Xms256m -Xmx256m -XX:MaxPermSize=64m</div></pre></td></tr></table></figure>
<h2 id="修改Tomcat的JDK目录"><a href="#修改Tomcat的JDK目录" class="headerlink" title="修改Tomcat的JDK目录"></a>修改Tomcat的JDK目录</h2><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;打开tomcat/bin/catalina.bat</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;在最后一个rem后面增加</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line"><span class="built_in">set</span> JAVA_HOME=C:\Program Files\Java\jdk1.6.0</div></pre></td></tr></table></figure>
<h2 id="增加虚拟目录"><a href="#增加虚拟目录" class="headerlink" title="增加虚拟目录"></a>增加虚拟目录</h2><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;/tomcat/conf/server.xml</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;第一行是以前默认存在的，第二行是新增的</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div></pre></td><td class="code"><pre><div class="line">&lt;Context path=<span class="string">""</span> docBase=<span class="string">"ROOT"</span> debug=<span class="string">"0"</span> reloadable=<span class="string">"true"</span>&gt;&lt;/Context&gt;</div><div class="line">&lt;Context path=<span class="string">"/jsp/a"</span> reloadable=<span class="string">"true"</span> docBase=<span class="string">"E:\workplace\www.java2000.net\WebContent"</span> /&gt;</div></pre></td></tr></table></figure>
<h2 id="GET方式URL乱码问题解决"><a href="#GET方式URL乱码问题解决" class="headerlink" title="GET方式URL乱码问题解决"></a>GET方式URL乱码问题解决</h2><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;打开 tomcat/conf/server.xml</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;查找下面这部分，在最后增加一段代码就可以了。</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div></pre></td><td class="code"><pre><div class="line">&lt;Connector port=<span class="string">"80"</span> maxHttpHeaderSize=<span class="string">"8192"</span></div><div class="line">.................</div><div class="line">URIEncoding=<span class="string">"UTF-8"</span> useBodyEncodingForURI=<span class="string">"true"</span></div><div class="line">...............</div><div class="line">　　/&gt;</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;其中的UTF-8 请根据你的需要自己修改，比如GBK</p>
<h2 id="虚拟主机配置文件"><a href="#虚拟主机配置文件" class="headerlink" title="虚拟主机配置文件"></a>虚拟主机配置文件</h2><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;tomcat/conf/server.xml</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div></pre></td><td class="code"><pre><div class="line">&lt;!-- 默认的主机 --&gt;</div><div class="line">&lt;Host name=<span class="string">"localhost"</span> appBase=<span class="string">"webapps"</span></div><div class="line">unpackWARs=<span class="string">"true"</span> </div><div class="line">xmlValidation=<span class="string">"false"</span> xmlNamespaceAware=<span class="string">"false"</span>&gt;</div><div class="line">&lt;Context path=<span class="string">""</span> docBase=<span class="string">"ROOT"</span> debug=<span class="string">"0"</span> reloadable=<span class="string">"true"</span>&gt;&lt;/Context&gt;</div><div class="line">...</div><div class="line">&lt;/host&gt;</div><div class="line">&lt;!-- 以下是新增的虚拟主机 --&gt;</div><div class="line">&lt;Host name=<span class="string">"www.java2000.net"</span> appBase=<span class="string">"webapps"</span></div><div class="line">unpackWARs=<span class="string">"true"</span> </div><div class="line">xmlValidation=<span class="string">"false"</span> xmlNamespaceAware=<span class="string">"false"</span>&gt;</div><div class="line">&lt;Context path=<span class="string">""</span> docBase=<span class="string">"d:/www.java2000.net"</span> debug=<span class="string">"0"</span> reloadable=<span class="string">"true"</span>&gt;&lt;/Context&gt;</div><div class="line">&lt;!-- 虚拟目录 --&gt;</div><div class="line">&lt;Context path=<span class="string">"/count"</span> docBase=<span class="string">"d:/counter.java2000.net"</span> debug=<span class="string">"0"</span> reloadable=<span class="string">"true"</span>&gt;&lt;/Context&gt;</div><div class="line">&lt;/Host&gt;</div><div class="line">&lt;Host name=<span class="string">"java2000.net"</span> appBase=<span class="string">"webapps"</span></div><div class="line">unpackWARs=<span class="string">"true"</span> </div><div class="line">xmlValidation=<span class="string">"false"</span> xmlNamespaceAware=<span class="string">"false"</span>&gt;</div><div class="line">&lt;Context path=<span class="string">""</span> docBase=<span class="string">"d:/www.java2000.net"</span> debug=<span class="string">"0"</span> reloadable=<span class="string">"true"</span>&gt;&lt;/Context&gt;</div><div class="line">&lt;Context path=<span class="string">"/count"</span> docBase=<span class="string">"d:/counter.java2000.net"</span> debug=<span class="string">"0"</span> reloadable=<span class="string">"true"</span>&gt;&lt;/Context&gt;</div><div class="line">&lt;/Host&gt;</div></pre></td></tr></table></figure>
<h2 id="数据源配置"><a href="#数据源配置" class="headerlink" title="数据源配置"></a>数据源配置</h2><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;比较复杂，各个版本都有所不同，请直接查看 <a href="http://java2000.net/p1906，包括tomcat5.0,tomcat5.5x,tomcat6.0的各个版本的配置方法。" target="_blank" rel="external">http://java2000.net/p1906，包括tomcat5.0,tomcat5.5x,tomcat6.0的各个版本的配置方法。</a></p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;更多关于Tomcat的使用，请看参考资料</p>
<h2 id="Tomcat配置的10个技巧"><a href="#Tomcat配置的10个技巧" class="headerlink" title="Tomcat配置的10个技巧"></a>Tomcat配置的10个技巧</h2><h3 id="1-配置系统管理（Admin-Web-Application）"><a href="#1-配置系统管理（Admin-Web-Application）" class="headerlink" title="1. 配置系统管理（Admin Web Application）"></a>1. 配置系统管理（Admin Web Application）</h3><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;大多数商业化的J2EE服务器都提供一个功能强大的管理界面，且大都采用易于理解的Web应用界面。Tomcat按照自己的方式，同样提供一个成熟的管理 工具，并且丝毫不逊于那些商业化的竞争对手。Tomcat的Admin Web Application最初在4.1版本时出现，当时的功能包括管理context、data source、user和group等。当然也可以管理像初始化参数，user、group、role的多种数据库管理等。在后续的版本中，这些功能将得 到很大的扩展，但现有的功能已经非常实用了。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Admin Web Application被定义在自动部署文件：CATALINA_BASE/webapps/admin.xml 。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;必须编辑这个文件，以确定Context中的docBase参数是绝对路径。也就是说， CATALINA_BASE/webapps/admin.xml 的路径是绝对路径。作为另外一种选择，也可以删除这个自动部署文件，而在server.xml文件中建立一个Admin Web Application的context，效果是一样的。不能管理Admin Web Application这个应用，换而言之，除了删除CATALINA_BASE/webapps/admin.xml ，可能什么都做不了。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;如果使用UserDatabaseRealm（默认），将需要添加一个user以及一个role到CATALINA_BASE/conf/tomcat-users.xml 文件中。你编辑这个文件，添加一个名叫“admin”的role 到该文件中，如下：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">&lt;role name=“admin”/&gt;</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;同样需要有一个用户，并且这个用户的角色是“admin”。象存在的用户那样，添加一个用户（改变密码使其更加安全）：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">&lt;user name=“admin” password=“deep_dark_secret” roles=“admin”/&gt;</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;当完成这些步骤后，请重新启动Tomcat，访问<a href="http://localhost:8080/admin，将看到一个登录界面。Admin" target="_blank" rel="external">http://localhost:8080/admin，将看到一个登录界面。Admin</a> Web Application采用基于容器管理的安全机制，并采用了Jakarta Struts框架。一旦作为“admin”角色的用户登录管理界面，将能够使用这个管理界面配置Tomcat。</p>
<h2 id="2-配置应用管理（Manager-Web-Application）"><a href="#2-配置应用管理（Manager-Web-Application）" class="headerlink" title="2.配置应用管理（Manager Web Application）"></a>2.配置应用管理（Manager Web Application）</h2><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Manager Web Application让你通过一个比Admin Web Application更为简单的用户界面，执行一些简单的Web应用任务。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;　Manager Web Application被被定义在一个自动部署文件中：</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;CATALINA_BASE/webapps/manager.xml 。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;必须编辑这个文件，以确保context的docBase参数是绝对路径，也就是说CATALINA_HOME/server/webapps/manager的绝对路径。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;如果使用的是UserDatabaseRealm，那么需要添加一个角色和一个用户到CATALINA_BASE/conf/tomcat-users.xml文件中。接下来，编辑这个文件，添加一个名为“manager”的角色到该文件中：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">&lt;role name=“manager”&gt;</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;同样需要有一个角色为“manager”的用户。像已经存在的用户那样，添加一个新用户（改变密码使其更加安全）：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">&lt;user name=“manager” password=“deep_dark_secret” roles=“manager”/&gt;</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;然后重新启动Tomcat，访问<a href="http://localhost/manager/list，将看到一个很朴素的文本型管理界面，或者访问http" target="_blank" rel="external">http://localhost/manager/list，将看到一个很朴素的文本型管理界面，或者访问http</a>: //localhost/manager/html/list，将看到一个HMTL的管理界面。不管是哪种方式都说明你的Manager Web Application现在已经启动了。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Manager application可以在没有系统管理特权的基础上，安装新的Web应用，以用于测试。如果我们有一个新的web应用位于 /home/user/hello下在，并且想把它安装到 /hello下，为了测试这个应用，可以这么做，在第一个文件框中输入“/hello”（作为访问时的path），在第二个文本框中输入“file: /home/user/hello”（作为Config URL）。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Manager application还允许停止、重新启动、移除以及重新部署一个web应用。停止一个应用使其无法被访问，当有用户尝试访问这个被停止的应用时，将 看到一个503的错误——“503 - This application is not currently available”。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;移除一个web应用，只是指从Tomcat的运行拷贝中删除了该应用，如果重新启动Tomcat，被删除的应用将再次出现（也就是说，移除并不是指从硬盘上删除）。</p>
<h3 id="3-部署一个web应用"><a href="#3-部署一个web应用" class="headerlink" title="3.部署一个web应用"></a>3.部署一个web应用</h3><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;有两个办法可以在系统中部署web服务。</p>
<ul>
<li>拷贝WAR文件或者web应用文件夹（包括该web的所有内容）到$CATALINA_BASE/webapps目录下。</li>
<li>为web服务建立一个只包括context内容的XML片断文件，并把该文件放到$CATALINA_BASE/webapps目录下。这个web应用本身可以存储在硬盘上的任何地方。</li>
</ul>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;如果有一个WAR文件，想部署它，则只需要把该文件简单的拷贝到CATALINA_BASE/webapps目录下即可，文件必须以“。war”作 为扩展名。一旦Tomcat监听到这个文件，它将（缺省的）解开该文件包作为一个子目录，并以WAR文件的文件名作为子目录的名字。接下来，Tomcat 将在内存中建立一个context，就好象在server.xml文件里建立一样。当然，其他必需的内容，将从server.xml中的 DefaultContext获得。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;部署web应用的另一种方式是写一个Context XML片断文件，然后把该文件拷贝到CATALINA_BASE/webapps目录下。一个Context片断并非一个完整的XML文件，而只是一个 context元素，以及对该应用的相应描述。这种片断文件就像是从server.xml中切取出来的context元素一样，所以这种片断被命名为 “context片断”。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;举个例子，如果我们想部署一个名叫MyWebApp.war的应用，该应用使用realm作为访问控制方式，我们可以使用下面这个片断：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div></pre></td><td class="code"><pre><div class="line">&lt;!--</div><div class="line">Context fragment <span class="keyword">for</span> deploying MyWebApp.war</div><div class="line">--&gt;</div><div class="line">&lt;Context path=“/demo” docBase=“webapps/MyWebApp.war”</div><div class="line">debug=“0” privileged=“<span class="literal">true</span>”&gt;</div><div class="line">&lt;Realm className=“org.apache.catalina.realm.UserDatabaseRealm”</div><div class="line">resourceName=“UserDatabase”/&gt;</div><div class="line">&lt;/Context&gt;</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;把该片断命名为“MyWebApp.xml”，然后拷贝到CATALINA_BASE/webapps目录下。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;这种context片断提供了一种便利的方法来部署web应用，不需要编辑server.xml，除非想改变缺省的部署特性，安装一个新的web应用时不需要重启动Tomcat。</p>
<h3 id="4-配置虚拟主机（Virtual-Hosts）"><a href="#4-配置虚拟主机（Virtual-Hosts）" class="headerlink" title="4.配置虚拟主机（Virtual Hosts）"></a>4.配置虚拟主机（Virtual Hosts）</h3><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;关于server.xml中“Host”这个元素，只有在设置虚拟主机的才需要修改。虚拟主机是一种在一个web服务器上服务多个域名的机制，对每个域 名而言，都好象独享了整个主机。实际上，大多数的小型商务网站都是采用虚拟主机实现的，这主要是因为虚拟主机能直接连接到Internet并提供相应的带<br>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;基于名字的虚拟主机可以被建立在任何web服务器上，建立的方法就是通过在域名服务器（DNS）上建立IP地址的别名，并且告诉web服务器把去往不同域 名的请求分发到相应的网页目录。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;在Tomcat中使用虚拟主机，需要设置DNS或主机数据。为了测试，为本地IP设置一个IP别名就足够了，接下来，你需要在server.xml中添加几行内容，如下：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div><div class="line">26</div><div class="line">27</div></pre></td><td class="code"><pre><div class="line">&lt;Server port=“8005” shutdown=“SHUTDOWN” debug=“0”&gt;</div><div class="line">&lt;Service name=“Tomcat-Standalone”&gt;</div><div class="line">&lt;Connector className=“org.apache.coyote.tomcat4.CoyoteConnector”</div><div class="line">port=“8080” minProcessors=“5” maxProcessors=“75”</div><div class="line">enableLookups=“<span class="literal">true</span>” redirectPort=“8443”/&gt;</div><div class="line">&lt;Connector className=“org.apache.coyote.tomcat4.CoyoteConnector”</div><div class="line">port=“8443” minProcessors=“5” maxProcessors=“75”</div><div class="line">acceptCount=“10” debug=“0” scheme=“https” secure=“<span class="literal">true</span>”/&gt;</div><div class="line">&lt;Factory className=“org.apache.coyote.tomcat4.CoyoteServerSocketFactory”</div><div class="line">clientAuth=“<span class="literal">false</span>” protocol=“TLS” /&gt;</div><div class="line">&lt;/Connector&gt;</div><div class="line">&lt;Engine name=“Standalone” defaultHost=“localhost” debug=“0”&gt;</div><div class="line">&lt;!-- This Host is the default Host --&gt;</div><div class="line">&lt;Host name=“localhost” debug=“0” appBase=“webapps”</div><div class="line">unpackWARs=“<span class="literal">true</span>” autoDeploy=“<span class="literal">true</span>”&gt;</div><div class="line">&lt;Context path=“” docBase=“ROOT” debug=“0”/&gt;</div><div class="line">&lt;Context path=“/orders” docBase=“/home/ian/orders” debug=“0”</div><div class="line">reloadable=“<span class="literal">true</span>” crossContext=“<span class="literal">true</span>”&gt;</div><div class="line">&lt;/Context&gt;</div><div class="line">&lt;/Host&gt;</div><div class="line">&lt;!-- This Host is the first “Virtual Host”: www.example.com --&gt;</div><div class="line">&lt;Host name=“www.example.com” appBase=“/home/example/webapp”&gt;</div><div class="line">&lt;Context path=“” docBase=“.”/&gt;</div><div class="line">&lt;/Host&gt;</div><div class="line">&lt;/Engine&gt;</div><div class="line">&lt;/Service&gt;</div><div class="line">&lt;/Server&gt;</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Tomcat的server.xml文件，在初始状态下，只包括一个虚拟主机，但是它容易被扩充到支持多个虚拟主机。在前面的例子中展示的是一个简单的 server.xml版本，其中粗体部分就是用于添加一个虚拟主机。每一个Host元素必须包括一个或多个context元素，所包含的context元 素中必须有一个是默认的context，这个默认的context的显示路径应该为空（例如，path=“”）。</p>
<h3 id="5-配置基础验证（Basic-Authentication）"><a href="#5-配置基础验证（Basic-Authentication）" class="headerlink" title="5.配置基础验证（Basic Authentication）"></a>5.配置基础验证（Basic Authentication）</h3><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;容器管理验证方法控制着当用户访问受保护的web应用资源时，如何进行用户的身份鉴别。当一个web应用使用了Basic Authentication（BASIC参数在web.xml文件中auto-method元素中设置），而有用户访问受保护的web应用时， Tomcat将通过HTTP Basic Authentication方式，弹出一个对话框，要求用户输入用户名和密码。在这种验证方法中，所有密码将被以64位的编码方式在网络上传输。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;注意：使用Basic Authentication通过被认为是不安全的，因为它没有强健的加密方法，除非在客户端和服务器端都使用HTTPS或者其他密码加密码方式（比如， 在一个虚拟私人网络中）。若没有额外的加密方法，网络管理员将能够截获（或滥用）用户的密码。但是，如果是刚开始使用Tomcat，或者你想在你的 web应用中测试一下基于容器的安全管理，Basic Authentication还是非常易于设置和使用的。只需要添加<security-constraint>和<login- config="">两个元素到web应用的web.xml文件中，并且在CATALINA_BASE/conf/tomcat-users.xml 文件中添加适当的<role>和<user>即可，然后重新启动Tomcat。</user></role></login-></security-constraint></p>
<h3 id="6-配置单点登录（Single-Sign-On）"><a href="#6-配置单点登录（Single-Sign-On）" class="headerlink" title="6.配置单点登录（Single Sign-On）"></a>6.配置单点登录（Single Sign-On）</h3><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;一旦设置了realm和验证的方法，就需要进行实际的用户登录处理。一般说来，对用户而言登录系统是一件很麻烦的事情，必须尽量减少用户登录验证的 次数。作为缺省的情况，当用户第一次请求受保护的资源时，每一个web应用都会要求用户登录。如果运行了多个web应用，并且每个应用都需要进行单独的 用户验证，那这看起来就有点像在用户搏斗。用户们不知道怎样才能把多个分离的应用整合成一个单独的系统，所有用户也就不知道他们需要访问多少个不 同的应用，只是很迷惑，为什么总要不停的登录。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Tomcat 4的“single sign-on”特性允许用户在访问同一虚拟主机下所有web应用时，只需登录一次。为了使用这个功能，只需要在Host上添加一个SingleSignOn Valve元素即可，如下所示：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div></pre></td><td class="code"><pre><div class="line">&lt;Valve className=“org.apache.catalina.authenticator.SingleSignOn”</div><div class="line">debug=“0”/&gt;</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;在Tomcat初始安装后，server.xml的注释里面包括SingleSignOn Valve配置的例子，只需要去掉注释，即可使用。那么，任何用户只要登录过一个应用，则对于同一虚拟主机下的所有应用同样有效。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;使用single sign-on valve有一些重要的限制：</p>
<ul>
<li>value必须被配置和嵌套在相同的Host元素里，并且所有需要进行单点验证的web应用（必须通过context元素定义）都位于该Host下。</li>
<li>包括共享用户信息的realm必须被设置在同一级Host中或者嵌套之外。</li>
<li>不能被context中的realm覆盖。</li>
<li>使用单点登录的web应用最好使用一个Tomcat的内置的验证方式（被定义在web.xml中的<auth-method>中），这比自定 义的验证方式强，Tomcat内置的的验证方式包括basic、digest、form和client-cert。</auth-method></li>
<li>如果你使用单点登录，还希望集成一个第三方的web应用到你的网站中来，并且这个新的web应用使用它自己的验证方式，而不使用容器管理安全，那你基本上 就没招了。用户每次登录原来所有应用时需要登录一次，并且在请求新的第三方应用时还得再登录一次。</li>
<li>单点登录需要使用cookies。</li>
</ul>
<h3 id="7-配置用户定制目录（Customized-User-Directores）"><a href="#7-配置用户定制目录（Customized-User-Directores）" class="headerlink" title="7.配置用户定制目录（Customized User Directores）"></a>7.配置用户定制目录（Customized User Directores）</h3><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;一些站点允许个别用户在服务器上发布网页。例如，一所大学的学院可能想给每一位学生一个公共区域，或者是一个ISP希望给一些web空间给他的客户，但这又不是虚拟主机。在这种情况下，一个典型的方法就是在用户名前面加一个特殊字符（~），作为每位用户的网站，比如：</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="http://www.cs.myuniversity.edu/~username" target="_blank" rel="external">http://www.cs.myuniversity.edu/~username</a> 提供两种方法在主机上映射这些个人网站，主要使用一对特殊的Listener元素。Listener的className属性应该是 org.apache.catalina.startup.UserConfig，userClass属性应该是几个映射类之一。如果电脑系统是 Unix，它将有一个标准的/etc/passwd文件，该文件中的帐号能够被运行中的Tomcat很容易的读取，该文件指定了用户的主目录，使用 PasswdUserDatabase 映射类。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<a href="http://members.mybigisp.com/~username" target="_blank" rel="external">http://members.mybigisp.com/~username</a></p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Tomcat</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div></pre></td><td class="code"><pre><div class="line">&lt;Listener className=“org.apache.catalina.startup.UserConfig”</div><div class="line">directoryName=“public_html”</div><div class="line">userClass=“org.apache.catalina.startup.PasswdUserDatabase”/&gt;</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;web文件需要放置在像/home/users/ian/public_html 或者 /users/jbrittain/public_html一样的目录下面。当然你也可以改变public_html 到其他任何子目录下。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;实际上，这个用户目录根本不一定需要位于用户主目录下里面。如果你没有一个密码文件，但你又想把一个用户名映射到公共的像/home一样目录的子目录里面，则可以使用HomesUserDatabase类。</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div></pre></td><td class="code"><pre><div class="line">&lt;Listener className=“org.apache.catalina.startup.UserConfig”</div><div class="line">directoryName=“public_html” homeBase=“/home”</div><div class="line">userClass=“org.apache.catalina.startup.HomesUserDatabase”/&gt;</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;这样一来，web文件就可以位于像/home/ian/public_html 或者 /home/jasonb/public_html一样的目录下。这种形式对Windows而言更加有利，你可以使用一个像c:\home这样的目录。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;这些Listener元素，如果出现，则必须在Host元素里面，而不能在context元素里面，因为它们都用应用于Host本身。</p>
<h3 id="8-在Tomcat中使用CGI脚本"><a href="#8-在Tomcat中使用CGI脚本" class="headerlink" title="8.在Tomcat中使用CGI脚本"></a>8.在Tomcat中使用CGI脚本</h3><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Tomcat主要是作为Servlet/JSP容器，但它也有许多传统web服务器的性能。支持通用网关接口（Common Gateway Interface，即CGI）就是其中之一，CGI提供一组方法在响应浏览器请求时运行一些扩展程序。CGI之所以被称为通用，是因为它能在大多数程序 或脚本中被调用，包括：Perl，Python，awk，Unix shell scripting等，甚至包括Java。不会把一个Java应用程序当作CGI来运行，毕竟这样太过原始。一般而言，开发Servlet总 要比CGI具有更好的效率，因为当用户点击一个链接或一个按钮时，不需要从操作系统层开始进行处理。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Tomcat包括一个可选的CGI Servlet，允许你运行遗留下来的CGI脚本。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;为了使Tomcat能够运行CGI，必须做的几件事：</p>
<ul>
<li>把servlets-cgi.renametojar （在CATALINA_HOME/server/lib/目录下）改名为servlets-cgi.jar。处理CGI的servlet应该位于Tomcat的CLASSPATH下。</li>
<li>在Tomcat的CATALINA_BASE/conf/web.xml 文件中，把关于<servlet-name> CGI的那段的注释去掉（默认情况下，该段位于第241行）。</servlet-name></li>
<li>同样，在Tomcat的CATALINA_BASE/conf/web.xml文件中，把关于对CGI进行映射的那段的注释去掉（默认情况下，该段位于第299行）。注意，这段内容指定了HTML链接到CGI脚本的访问方式。</li>
<li>可以把CGI脚本放置在WEB-INF/cgi 目录下（注意，WEB-INF是一个安全的地方，你可以把一些不想被用户看见或基于安全考虑不想暴露的文件放在此处），或者也可以把CGI脚本放置在 context下的其他目录下，并为CGI Servlet调整cgiPathPrefix初始化参数。这就指定的CGI Servlet的实际位置，且不能与上一步指定的URL重名。</li>
<li>重新启动Tomcat，你的CGI就可以运行了。</li>
</ul>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;在Tomcat中，CGI程序缺省放置在WEB-INF/cgi目录下，正如前面所提示的那样，WEB-INF目录受保护的，通过客户端的浏览器无法窥探 到其中内容，所以对于放置含有密码或其他敏感信息的CGI脚本而言，这是一个非常好的地方。为了兼容其他服务器，尽管你也可以把CGI脚本保存在传统的 /cgi-bin目录，但要知道，在这些目录中的文件有可能被网上好奇的冲浪者看到。另外，在Unix中，请确定运行Tomcat的用户有执行CGI脚本 的权限。</p>
<h3 id="9-改变Tomcat中的JSP编译器（JSP-Compiler）"><a href="#9-改变Tomcat中的JSP编译器（JSP-Compiler）" class="headerlink" title="9.改变Tomcat中的JSP编译器（JSP Compiler）"></a>9.改变Tomcat中的JSP编译器（JSP Compiler）</h3><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;在Tomcat 4.1（或更高版本，大概），JSP的编译由包含在Tomcat里面的Ant程序控制器直接执行。这听起来有一点点奇怪，但这正是Ant有意为之的一部 分，有一个API文档指导开发者在没有启动一个新的JVM的情况下，使用Ant。这是使用Ant进行Java开发的一大优势。另外，这也意味着你现在能够 在Ant中使用任何javac支持的编译方式，这里有一个关于Apache Ant使用手册的javac page列表。使用起来是容易的，因为你只需要在<init-param> 元素中定义一个名字叫“compiler”，并且在value中有一个支持编译的编译器名字，示例如下：</init-param></p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div></pre></td><td class="code"><pre><div class="line">&lt;servlet&gt;</div><div class="line">&lt;servlet-name&gt;jsp&lt;/servlet-name&gt;</div><div class="line">&lt;servlet-class&gt;</div><div class="line">org.apache.jasper.servlet.JspServlet</div><div class="line">&lt;/servlet-class&gt;</div><div class="line">&lt;init-param&gt;</div><div class="line">&lt;param-name&gt;logVerbosityLevel&lt;/param-name&gt;</div><div class="line">&lt;param-value&gt;WARNING&lt;/param-value&gt;</div><div class="line">&lt;/init-param&gt;</div><div class="line">&lt;init-param&gt;</div><div class="line">&lt;param-name&gt;compiler&lt;/param-name&gt;</div><div class="line">&lt;param-value&gt;jikes&lt;/param-value&gt;</div><div class="line">&lt;/init-param&gt;</div><div class="line">&lt;load-on-startup&gt;3&lt;/load-on-startup&gt;</div><div class="line">&lt;/servlet&gt;</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;当然，给出的编译器必须已经安装在你的系统中，并且CLASSPATH可能需要设置，那处决于你选择的是何种编译器。</p>
<h3 id="10-限制特定主机访问（Restricting-Access-to-Specific-Hosts）"><a href="#10-限制特定主机访问（Restricting-Access-to-Specific-Hosts）" class="headerlink" title="10.限制特定主机访问（Restricting Access to Specific Hosts）"></a>10.限制特定主机访问（Restricting Access to Specific Hosts）</h3><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;有时，可能想限制对Tomcat web应用的访问，比如，希望只有指定的主机或IP地址可以访问应用。这样一来，就只有那些指定的的客户端可以访问服务的内容了。为了实现这种效 果，Tomcat提供了两个参数供你配置：RemoteHostValve 和RemoteAddrValve。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;通过配置这两个参数，可以让你过滤来自请求的主机或IP地址，并允许或拒绝哪些主机/IP。与之类似的，在Apache的httpd文件里有对每个目录的允许/拒绝指定。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;可以把Admin Web application设置成只允许本地访问，设置如下：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div></pre></td><td class="code"><pre><div class="line">&lt;Context path=“/path/to/secret_files” …&gt;</div><div class="line">&lt;Valve className=“org.apache.catalina.valves.RemoteAddrValve”</div><div class="line">allow=“127.0.0.1” deny=“”/&gt;</div><div class="line">&lt;/Context&gt;</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;如果没有给出允许主机的指定，那么与拒绝主机匹配的主机就会被拒绝，除此之外的都是允许的。与之类似，如果没有给出拒绝主机的指定，那么与允许主机匹配的主机就会被允许，除此之外的都是拒绝的。</p>

	

	

</article>




	<article>
	
		<h1><a href="/2017/10/12/Tomcat/11. tomcat连接常用数据库的用法/">tomcat连接常用数据库的用法</a></h1>
	
	<div class="article__infos">
		<span class="article__date">2017-10-12</span><br />
		
		
			<span class="article__tags">
			  	<a class="article__tag-link" href="/tags/Tomcat/">Tomcat</a>
			</span>
		
	</div>

	

	
		<h2 id="一、用于数据库连接的术语："><a href="#一、用于数据库连接的术语：" class="headerlink" title="一、用于数据库连接的术语："></a>一、用于数据库连接的术语：</h2><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;JDBC：（Java database connectivity）是基于java数据访问技术的一个API通过客户端访问服务器的数据库，是一个面向关系型数据库并提供一种方法查询和更新数据库；</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;JNDI：(Java naming and directory interface)JNDI服务提供了对应用程序命名和目录功 能的一种用java程序编写的基于API的java平台；</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;DataSource：是一个通过JDBC API访问关系型数据库的java对象，当与JNDI整合并在JDNI 名称服务中注册后能更好的工作；</p>
<h2 id="二、tomcat连接常用数据库的操作步骤："><a href="#二、tomcat连接常用数据库的操作步骤：" class="headerlink" title="二、tomcat连接常用数据库的操作步骤："></a>二、tomcat连接常用数据库的操作步骤：</h2><h3 id="Tomcat配置Oracle-DataSource："><a href="#Tomcat配置Oracle-DataSource：" class="headerlink" title="Tomcat配置Oracle DataSource："></a>Tomcat配置Oracle DataSource：</h3><ol>
<li>在server.xml全局文件中定义如下内容：</li>
</ol>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div></pre></td><td class="code"><pre><div class="line">&lt;GlobalNamingResources&gt; </div><div class="line">&lt;!-- Editable user database that can also be used by </div><div class="line">UserDatabaseRealm to authenticate users--&gt; </div><div class="line">&lt;Resource name=<span class="string">"jdbc/tomcat7"</span> auth=<span class="string">"Container"</span> </div><div class="line"><span class="built_in">type</span>=<span class="string">"javax.sql.DataSource"</span> </div><div class="line">driverClassName=<span class="string">"oracle.jdbc.OracleDriver"</span> </div><div class="line">url=<span class="string">"jdbc:oracle:thin:@127.0.0.1:1521:test"</span> </div><div class="line">description=<span class="string">"test database for tomcat 7"</span> </div><div class="line">Configuration and Deployment </div><div class="line">[ 46 ] </div><div class="line">username=<span class="string">"admin"</span> password=<span class="string">"admin"</span> maxActive=<span class="string">"20"</span> maxIdle=<span class="string">"10"</span> </div><div class="line">maxWait=<span class="string">"-1"</span>/&gt; </div><div class="line">&lt;/GlobalNamingResources&gt;</div></pre></td></tr></table></figure>
<ol>
<li><p><a href="http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-10201-088211.html" target="_blank" rel="external">http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-10201-088211.html</a> 下载Oracle JDBC驱动程序类并放在CATALINA_HOME/lib/目录下，tomcat默认只接 受.jar结尾的类，如果是zip压缩格式需要将其重名为.jar结尾，然后放到 CATALINA_HOME/lib/目录下；</p>
</li>
<li><p>在应用下面的WEB-INF/web.xml文件中强制定义文档类型定义，示例如下：</p>
</li>
</ol>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div></pre></td><td class="code"><pre><div class="line">&lt;resource-ref&gt; </div><div class="line">&lt;description&gt;Oracle Datasource <span class="keyword">for</span> tomcat &lt;/description&gt; </div><div class="line">&lt;res-ref-name&gt;jdbc/tomcat7 &lt;/res-ref-name&gt; </div><div class="line">&lt;res-type&gt;javax.sql.DataSource&lt;/res-type&gt; </div><div class="line">&lt;res-auth&gt;Container&lt;/res-auth&gt; </div><div class="line">&lt;/resource-ref&gt;</div></pre></td></tr></table></figure>
<ol>
<li>开发人员在代码中引用JNDI并连接到数据库；</li>
</ol>
<h3 id="Tomcat配置mysql-DataSource："><a href="#Tomcat配置mysql-DataSource：" class="headerlink" title="Tomcat配置mysql DataSource："></a>Tomcat配置mysql DataSource：</h3><ol>
<li>在server.xml全局文件中定义如下内容：</li>
</ol>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div></pre></td><td class="code"><pre><div class="line">&lt;Resource name=<span class="string">"jdbc/tomcat7"</span> auth=<span class="string">"Container"</span> </div><div class="line"><span class="built_in">type</span>=<span class="string">"javax.sql.DataSource"</span> </div><div class="line">maxActive=<span class="string">"100"</span> maxIdle=<span class="string">"30"</span> maxWait=<span class="string">"10000"</span> </div><div class="line">username=<span class="string">"tomcatuser"</span> password=<span class="string">"tomcat"</span> </div><div class="line">driverClassName=<span class="string">"com.mysql.jdbc.Driver"</span> </div><div class="line">url=<span class="string">"jdbc:mysql://localhost:3306/tomcat7"</span>/&gt;</div></pre></td></tr></table></figure>
<ol>
<li>在应用下面的WEB-INF/web.xml文件中强制定义文档类型定义，示例如下：</li>
</ol>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div></pre></td><td class="code"><pre><div class="line">&lt;web-app xmlns=<span class="string">"http://java.sun.com/xml/ns/j2ee"</span> </div><div class="line">xmlns:xsi=<span class="string">"http://www.w3.org/2001/XMLSchema-instance"</span> </div><div class="line">xsi:schemaLocation=<span class="string">"http://java.sun.com/xml/ns/j2ee </span></div><div class="line"><span class="string">http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"</span> </div><div class="line">version=<span class="string">"2.4"</span>&gt; </div><div class="line">&lt;description&gt;Tomcat 7 <span class="built_in">test</span> DB&lt;/description&gt; </div><div class="line">&lt;resource-ref&gt; </div><div class="line">&lt;description&gt;DB Connection&lt;/description&gt; </div><div class="line">&lt;res-ref-name&gt;jdbc/tomcat7&lt;/res-ref-name&gt; </div><div class="line">&lt;res-type&gt;javax.sql.DataSource&lt;/res-type&gt; </div><div class="line">&lt;res-auth&gt;Container&lt;/res-auth&gt; </div><div class="line">&lt;/resource-ref&gt; </div><div class="line">&lt;/web-app&gt;</div></pre></td></tr></table></figure>
<ol>
<li><p><a href="http://dev.mysql.com/downloads/" target="_blank" rel="external">http://dev.mysql.com/downloads/</a> 下载MYSQL JDBC驱动程序类并放在 CATALINA_HOME/lib/目录下，tomcat默认只接受.jar结尾的类，如果是zip压缩格式需 要将其重名为.jar结尾，然后放到CATALINA_HOME/lib/目录下；</p>
</li>
<li><p>对连接tomcat的用户授予全部权限，格式如下：</p>
</li>
</ol>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div></pre></td><td class="code"><pre><div class="line">mysql&gt; GRANT ALL PRIVILEGES ON *.* TO tomcatuser@localhost </div><div class="line">IDENTIFIED BY <span class="string">'tomcat7'</span> WITH GRANT OPTION; </div><div class="line">mysql&gt; create database tomcat7; </div><div class="line">mysql&gt; use tomcat7; </div><div class="line">mysql&gt; create table testdata ( id int not null auto_increment </div><div class="line">primary key,foo varchar(25), bar int);</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;注：用户密码一定不要为空，否则会造成连接tomcat认证错误； </p>
<h3 id="Tomcat配置Postgresql-DataSource："><a href="#Tomcat配置Postgresql-DataSource：" class="headerlink" title="Tomcat配置Postgresql DataSource："></a>Tomcat配置Postgresql DataSource：</h3><ol>
<li>在server.xml全局文件中定义如下内容：</li>
</ol>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div></pre></td><td class="code"><pre><div class="line">&lt;Resource name=<span class="string">"jdbc/tomcat7"</span> auth=<span class="string">"Container"</span> </div><div class="line"><span class="built_in">type</span>=<span class="string">"javax.sql.DataSource"</span> </div><div class="line">driverClassName=<span class="string">"org.postgresql.Driver"</span> </div><div class="line">url=<span class="string">"jdbc:postgresql://127.0.0.1:5432/tomcat7"</span> </div><div class="line">username=<span class="string">"tomcat7"</span> password=<span class="string">"tomcat"</span> maxActive=<span class="string">"20"</span> maxIdle=<span class="string">"10"</span> </div><div class="line">maxWait=<span class="string">"-1"</span>/&gt;</div></pre></td></tr></table></figure>
<ol>
<li><p><a href="http://jdbc.postgresql.org/download.html" target="_blank" rel="external">http://jdbc.postgresql.org/download.html</a> 下载PostgreSQL JDBC驱动类并放在 CATALINA_HOME/lib/目录下，tomcat默认只接受.jar结尾的类，如果是zip压缩格式需 要将其重名为.jar结尾，然后放到CATALINA_HOME/lib/目录下；</p>
</li>
<li><p>在应用下面的WEB-INF/web.xml文件中强制定义文档类型定义，示例如下：</p>
</li>
</ol>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div></pre></td><td class="code"><pre><div class="line">&lt;resource-ref&gt; </div><div class="line">&lt;description&gt;postgreSQL Tomcat datasource &lt;/description&gt; </div><div class="line">&lt;res-ref-name&gt;jdbc/tomcat7 &lt;/res-ref-name&gt; </div><div class="line">&lt;res-type&gt;javax.sql.DataSource&lt;/res-type&gt; </div><div class="line">&lt;res-auth&gt;Container&lt;/res-auth&gt; </div><div class="line">&lt;/resource-ref&gt;</div></pre></td></tr></table></figure>

	

	

</article>




	<article>
	
		<h1><a href="/2017/10/12/Tomcat/1. tomcat 中 JDK 安装/">tomcat 中 JDK 安装</a></h1>
	
	<div class="article__infos">
		<span class="article__date">2017-10-12</span><br />
		
		
			<span class="article__tags">
			  	<a class="article__tag-link" href="/tags/Tomcat/">Tomcat</a>
			</span>
		
	</div>

	

	
		<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;目前很多网站使用 jsp 的程序编写，所以解析 jsp 的程序就必须要有相关的软件来完成。 tomcat 就是用来解析 jsp 程序的一个软件，tomcat 是 apache 软件基金会（apache software foundation）的jakarta 项目中的一个核心项目，由 apache 、sun 和其他一些公司及个人共同开发而成。因为 tomcat 技术先进，性能稳定，而且免费，因而深受 java 爱好者的喜爱并得到了部分软件开发商的认可，成为目前比较流行的 web 应用服务。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;tomcat 是一个轻量级应用服务，在中小型系统和并发访问用户不是很多的场合下被普遍使用，是开发和调试 jsp 程序的首选。当在一台机器上配置好 apache 服务器，可利用它响应对 HTML 页面的访问请求。实际上 tomcat 部分是 apache 服务器的扩展，但它是独立运行的，所以运行 tomcat 时，它实际上作为一个与 apache 独立的进程单独运行的。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;tomcat 的安装分为两个步骤：安装 JDK 和安装 Tomcat。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;JDK (Java Development Kit）是 Sun Microsystems 针对 Java 开发员的产品。自从 Java 推出以来，JDK 已经成为使用最广泛的 Java SDK 。JDK 是整个 Java 的核心，包括了 Java 运行环境，Java 工具和 Java 基础的类库。所以要想运行 jsp 的程序必须要有 JDK 的支持，理所当然安装 Tomcat 的前提是安装好 JDK 。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;首先下载 JDK ，<a href="http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html" target="_blank" rel="external">官网</a></p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;下载后解压：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div></pre></td><td class="code"><pre><div class="line">[root@192 src]<span class="comment"># tar zxvf jdk-8u111-linux-x64.tar.gz </span></div><div class="line">[root@192 src]<span class="comment"># mv jdk1.8.0_111/ /usr/local/</span></div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;编辑文件：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">[root@192 src]<span class="comment"># vim /etc/profile.d/java.sh</span></div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;加入配置：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div></pre></td><td class="code"><pre><div class="line">JAVA_HOME=/usr/<span class="built_in">local</span>/jdk1.8.0_111/</div><div class="line">JAVA_BIN=/usr/<span class="built_in">local</span>/jdk1.8.0_111/bin</div><div class="line">JRE_HOME=/usr/<span class="built_in">local</span>/jdk1.8.0_111/jre</div><div class="line">PATH=<span class="variable">$PATH</span>:/usr/<span class="built_in">local</span>/jdk1.8.0_111/bin:/usr/<span class="built_in">local</span>/jdk1.8.0_111/jre/bin</div><div class="line">CLASSPATH=/usr/<span class="built_in">local</span>/jdk1.8.0_111/jre/lib:/usr/<span class="built_in">local</span>/jdk1.8.0_111/lib:/usr/<span class="built_in">local</span>/jdk1.8.0_111/jre/lib/charsets.jar</div><div class="line"><span class="built_in">export</span> JAVA_HOME JAVA_BIN JRE_HOME PATH CLASSPATH</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;然后初始化环境变量：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">[root@192 src]<span class="comment"># source /etc/profile.d/java.sh</span></div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;如果以上配置成功，下面的命令可以看到 Java 的版本：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div></pre></td><td class="code"><pre><div class="line">[root@192 src]<span class="comment"># java -version</span></div><div class="line">java version <span class="string">"1.8.0_111"</span></div><div class="line">Java(TM) SE Runtime Environment (build 1.8.0_111-b14)</div><div class="line">Java HotSpot(TM) 64-Bit Server VM (build 25.111-b14, mixed mode)</div></pre></td></tr></table></figure>

	

	

</article>




	<article>
	
		<h1><a href="/2017/10/12/Squid/9. squid代理加用户认证/">squid代理加用户认证</a></h1>
	
	<div class="article__infos">
		<span class="article__date">2017-10-12</span><br />
		
		
			<span class="article__tags">
			  	<a class="article__tag-link" href="/tags/Squid/">Squid</a>
			</span>
		
	</div>

	

	
		<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;用authentication helpers添加身份验证</p>
<h2 id="有如下几种认证方式-："><a href="#有如下几种认证方式-：" class="headerlink" title="有如下几种认证方式 ："></a>有如下几种认证方式 ：</h2><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div></pre></td><td class="code"><pre><div class="line">=&gt; NCSA: Uses an NCSA-style username and password file.</div><div class="line">=&gt; LDAP: Uses the Lightweight Directory Access Protocol</div><div class="line">=&gt; MSNT: Uses a Windows NT authentication domain.</div><div class="line">=&gt; PAM: Uses the Linux Pluggable Authentication Modules scheme.</div><div class="line">=&gt; SMB: Uses a SMB server like Windows NT or Samba.</div><div class="line">=&gt; getpwam: Uses the old-fashioned Unix password file.</div><div class="line">=&gt; SASL: Uses SALS libraries.</div><div class="line">=&gt; NTLM, Negotiate and Digest authentication</div></pre></td></tr></table></figure>
<h2 id="配置NCSA-认证"><a href="#配置NCSA-认证" class="headerlink" title="配置NCSA 认证"></a>配置NCSA 认证</h2><h3 id="一、创建认证用户名-密码，用htpasswd"><a href="#一、创建认证用户名-密码，用htpasswd" class="headerlink" title="一、创建认证用户名/密码，用htpasswd"></a>一、创建认证用户名/密码，用htpasswd</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">htpasswd /etc/squid/passwd user1</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;输入密码</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div></pre></td><td class="code"><pre><div class="line">New password:</div><div class="line">Re-type new password:</div></pre></td></tr></table></figure>
<h3 id="二、确定squid是否支持authentication-helper"><a href="#二、确定squid是否支持authentication-helper" class="headerlink" title="二、确定squid是否支持authentication helper"></a>二、确定squid是否支持authentication helper</h3><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;yum 安装的</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">rpm -ql squid | grep ncsa_auth</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;输出：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">/usr/lib64/squid/ncsa_auth</div></pre></td></tr></table></figure>
<h3 id="三、配置SQUID认证"><a href="#三、配置SQUID认证" class="headerlink" title="三、配置SQUID认证"></a>三、配置SQUID认证</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">vi /etc/squid/squid.conf</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;加入验证部分内容：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div></pre></td><td class="code"><pre><div class="line">auth_param basic program /usr/lib64/squid/ncsa_auth /etc/squid/passwd //定义squid密码文件与ncsa_auth文件位置</div><div class="line">auth_param basic children 15 //认证进程的数量</div><div class="line">auth_param basic realm Squid proxy-caching web server</div><div class="line">auth_param basic credentialsttl 2 hours //认证有效期</div><div class="line">auth_param basic casesensitive off //用户名不区分大小写，可改为ON区分大小写</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;添加 acl 验证用户：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div></pre></td><td class="code"><pre><div class="line">acl ncsa_users proxy_auth REQUIRED</div><div class="line">http_access allow ncsa_users</div></pre></td></tr></table></figure>
<h3 id="四、重启squid生效"><a href="#四、重启squid生效" class="headerlink" title="四、重启squid生效"></a>四、重启squid生效</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line"><span class="comment"># /etc/init.d/squid restart</span></div></pre></td></tr></table></figure>

	

	

</article>




	<article>
	
		<h1><a href="/2017/10/12/Squid/8. squid 透明代理配置/">squid 透明代理配置</a></h1>
	
	<div class="article__infos">
		<span class="article__date">2017-10-12</span><br />
		
		
			<span class="article__tags">
			  	<a class="article__tag-link" href="/tags/Squid/">Squid</a>
			</span>
		
	</div>

	

	
		<h2 id="什么是透明代理？"><a href="#什么是透明代理？" class="headerlink" title="什么是透明代理？"></a>什么是透明代理？</h2><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;透明代理的意思是客户端根本不需要知道有代理服务器的存在，它改变你的request fields（报文），并会传送真实IP，多用于路由器的NAT转发中。</p>
<h2 id="透明代理的原理："><a href="#透明代理的原理：" class="headerlink" title="透明代理的原理："></a>透明代理的原理：</h2><ol>
<li>假设A为内部网络客户机</li>
<li>B为外部网络服务器，B提供的服务为httpd服务，监听端口为80</li>
<li>C为代理服务器（也是我们的网关），假如代理服务器提供服务端口为3128</li>
</ol>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;过程： 当A向B的80端口请求数据时，TCP连接请求要先经过C，C看到A请求的是B的80端口时，C由于已经设置了转发规则，所以C会把A的请求80端口转发到自己的3128端口，也就是说A将要直接访问C的3128端口，而非B服务器的80端口，此时，C会先去访问B的80端口，把A要访问B的请求数据先请求过来，保存到C上，然后C再把请求数据吐给A。而在A看来，它貌似是直接请求的B，而实际并非如此。由于这些连接过程是自动的，不需要客户端手工配置代理服务器，甚至用户根本不知道代理服务器的存在，因而对用户来说是透明的。</p>
<h2 id="来配置透明代理："><a href="#来配置透明代理：" class="headerlink" title="来配置透明代理："></a>来配置透明代理：</h2><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;通过上面的原理分析，可知，只有代理服务器为网关时，才可以实现透明代理的功能，否则无效。实际应用中，透明代理服务器应该有至少两个网卡，第一个网卡连接到外网，或者它可以直接上网，第二个网卡连接的是内部的一个局域网段，也就是想使用代理上网的网段。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;假设，透明代理服务器的网卡1eth0设置IP为 10.2.1.100（可以上网的ip）, 网卡2eth1的ip设置为192.168.19.1，那么要通过透明代理上网的局域网段应该为 192.168.19.0/24，并且在该局域网的客户机应该设置的网关地址为192.168.19.1.</p>
<h3 id="1-安装squid"><a href="#1-安装squid" class="headerlink" title="1.安装squid"></a>1.安装squid</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">yum install -y squid</div></pre></td></tr></table></figure>
<h3 id="2-配置squid"><a href="#2-配置squid" class="headerlink" title="2.配置squid"></a>2.配置squid</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div></pre></td><td class="code"><pre><div class="line">rm -f /etc/squid/squid.conf</div><div class="line">vim /etc/squid/squid.conf</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;写入如下内容：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div><div class="line">26</div><div class="line">27</div><div class="line">28</div></pre></td><td class="code"><pre><div class="line">http_port 3128 transparent</div><div class="line">acl manager proto cache_object</div><div class="line">acl localhost src 127.0.0.1/32 ::1</div><div class="line">acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1</div><div class="line">acl localnet src 10.0.0.0/8 <span class="comment"># RFC1918 possible internal network</span></div><div class="line">acl localnet src 172.16.0.0/12 <span class="comment"># RFC1918 possible internal network</span></div><div class="line">acl localnet src 192.168.0.0/16 <span class="comment"># RFC1918 possible internal network</span></div><div class="line">acl SSL_ports port 443</div><div class="line">acl Safe_ports port 80 8080 <span class="comment"># http</span></div><div class="line">acl Safe_ports port 21 <span class="comment"># ftp</span></div><div class="line">acl Safe_ports port 443 <span class="comment"># https</span></div><div class="line">acl CONNECT method CONNECT</div><div class="line">http_access allow manager localhost</div><div class="line">http_access deny manager</div><div class="line">http_access deny !Safe_ports</div><div class="line">http_access deny CONNECT !SSL_ports</div><div class="line">http_access allow localnet</div><div class="line">http_access allow localhost</div><div class="line">http_access deny all</div><div class="line">cache_dir aufs /data/cache 1024 16 256</div><div class="line">cache_mem 128 MB</div><div class="line">hierarchy_stoplist cgi-bin ?</div><div class="line">coredump_dir /var/spool/squid</div><div class="line">refresh_pattern ^ftp: 1440 20% 10080</div><div class="line">refresh_pattern ^gopher: 1440 0% 1440</div><div class="line">refresh_pattern -i (/cgi-bin/|\?) 0 0% 0</div><div class="line">refresh_pattern \.(jpg|png|gif|mp3|xml) 1440 50% 2880 ignore-reload</div><div class="line">refresh_pattern . 0 20% 4320</div></pre></td></tr></table></figure>
<h3 id="3-创建缓存目录，并修改权限"><a href="#3-创建缓存目录，并修改权限" class="headerlink" title="3.创建缓存目录，并修改权限"></a>3.创建缓存目录，并修改权限</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">mkdir /data/cahce; chown -R squid:squid /data/cache</div></pre></td></tr></table></figure>
<h3 id="4-初始化缓存目录"><a href="#4-初始化缓存目录" class="headerlink" title="4.初始化缓存目录"></a>4.初始化缓存目录</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">squid -z</div></pre></td></tr></table></figure>
<h3 id="5-启动squid"><a href="#5-启动squid" class="headerlink" title="5.启动squid"></a>5.启动squid</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">service squid start</div></pre></td></tr></table></figure>
<h3 id="6-打开端口转发"><a href="#6-打开端口转发" class="headerlink" title="6.打开端口转发"></a>6.打开端口转发</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line"><span class="built_in">echo</span> <span class="string">"1"</span> &gt; /proc/sys/net/ipv4/ip_forward</div></pre></td></tr></table></figure>
<h3 id="7-设置防火墙规则"><a href="#7-设置防火墙规则" class="headerlink" title="7. 设置防火墙规则"></a>7. 设置防火墙规则</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div></pre></td><td class="code"><pre><div class="line">iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE</div><div class="line">iptables -t nat -A PREROUTING -p tcp -s 192.168.19.0/24 --dport 80 -j REDIRECT --to-ports 3128</div></pre></td></tr></table></figure>

	

	

</article>




	<article>
	
		<h1><a href="/2017/10/12/Squid/7. squid 日志不记录图片、js、css等静态文件/">squid 日志不记录图片、js、css等静态文件</a></h1>
	
	<div class="article__infos">
		<span class="article__date">2017-10-12</span><br />
		
		
			<span class="article__tags">
			  	<a class="article__tag-link" href="/tags/Squid/">Squid</a>
			</span>
		
	</div>

	

	
		<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;在squid.conf中加入：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div></pre></td><td class="code"><pre><div class="line">acl nolog urlpath_regex -i \.css \.js \.swf \.jpg \.gif \.png \.jpeg</div><div class="line">access_log /var/<span class="built_in">log</span>/squid/access.log common !nolog</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;其中common 为日志格式</p>

	

	

</article>




	<article>
	
		<h1><a href="/2017/10/12/Squid/6. Squid优化/">Squid优化</a></h1>
	
	<div class="article__infos">
		<span class="article__date">2017-10-12</span><br />
		
		
			<span class="article__tags">
			  	<a class="article__tag-link" href="/tags/Squid/">Squid</a>
			</span>
		
	</div>

	

	
		<h2 id="Squid优化-一"><a href="#Squid优化-一" class="headerlink" title="Squid优化(一)"></a>Squid优化(一)</h2><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;几个SQUID重要参数：</p>
<ul>
<li>maximum_object_size 是 能cache最大的文件大小.对应wmv,rm文件,建议设置为32768 kB</li>
<li>maximum_object_size_in_memory 是在内存中cache的最大文件大小.</li>
<li>cache_mem 是SQUID可用到的最大内存.经实践,4G内存的服务器用2G；超过2G导致SQUID运行不稳</li>
</ul>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;首先要分析SQUID所cache内容：</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;运行</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">squidclient -p 80 cache_object://localhost/info</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;能看到如下内容：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div></pre></td><td class="code"><pre><div class="line">Storage Swap size: 7549104 KB</div><div class="line">Storage Mem size: 418804 KB</div><div class="line">Mean Object Size: 160.46 KB</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Mean Object Size是平均内容大小,一般要把maximum_object_size_in_memory设置成离它最近的128的倍数.在这个例子中maximum_object_size_in_memory 的值应该是256kB.</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;cache_mem 一般设置成服务器内存的一半或更多,只要运行过程中LINUX没有使用SWAP就可以.</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;再就是按业务分SQUID.</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;比如某个论坛,用户能上载图片和视频；当然我们要把上载的图片、视频放在单独的域名上,比如img.example.com, video.example.com；这两个域名只提供静态文件服务.</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;根据统计,图片的平均大小在100KB,视频的平均大小在4M,差别是很大,应该建两个squid分别作图片和视频的CACHE.图片SQUID的 maximum_object_size_in_memory 设置为256KB,视频的SQUID的maximum_object_size_in_memory设置为8196KB.</p>
<h2 id="Squid优化-二"><a href="#Squid优化-二" class="headerlink" title="Squid优化(二)"></a>Squid优化(二)</h2><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;探讨动态内容的CACHE.</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;BBS,论坛是典型动态内容,要保证内容更新及时的同时,提高访问速度,降低数据库负担不是个简单任务.经实践发现如下办法取得很好效果：</p>
<ol>
<li>配置SQUID,对动态内容强制CACHE,用到的配置参数是refresh_pattern<br>refresh_pattern ^/forum/viewthread.php 1440 1000% 1440 ignore-reload<br>/forum/viewthread.php的内容将强制保持1天</li>
<li>修改论坛程序在用户回复帖子后,向SQUID发送PURGE命令清除相应帖子的页面CACHE,保证失效性</li>
</ol>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;实现过这一功能,但是有时候生效,有时候无效,还未进一步查明原因.(Edit by Sean)</p>
<ol>
<li>有些频繁更新的页面可以不CACHE,用no_cache参数</li>
</ol>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div></pre></td><td class="code"><pre><div class="line">acl no_forum_cache urlpath_regex ^/forum/forumdisplay.php</div><div class="line">no_cache DENY no_forum_cache</div></pre></td></tr></table></figure>

	

	

</article>




	<article>
	
		<h1><a href="/2017/10/12/Squid/5. Squid.conf配置文件详解/">Squid.conf配置文件详解</a></h1>
	
	<div class="article__infos">
		<span class="article__date">2017-10-12</span><br />
		
		
			<span class="article__tags">
			  	<a class="article__tag-link" href="/tags/Squid/">Squid</a>
			</span>
		
	</div>

	

	
		<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;squid常用命令：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div><div class="line">26</div><div class="line">27</div><div class="line">28</div><div class="line">29</div><div class="line">30</div><div class="line">31</div><div class="line">32</div><div class="line">33</div><div class="line">34</div><div class="line">35</div><div class="line">36</div><div class="line">37</div><div class="line">38</div><div class="line">39</div><div class="line">40</div><div class="line">41</div><div class="line">42</div><div class="line">43</div><div class="line">44</div><div class="line">45</div><div class="line">46</div><div class="line">47</div><div class="line">48</div><div class="line">49</div><div class="line">50</div><div class="line">51</div><div class="line">52</div><div class="line">53</div><div class="line">54</div><div class="line">55</div><div class="line">56</div><div class="line">57</div><div class="line">58</div><div class="line">59</div><div class="line">60</div><div class="line">61</div><div class="line">62</div><div class="line">63</div><div class="line">64</div><div class="line">65</div><div class="line">66</div><div class="line">67</div><div class="line">68</div><div class="line">69</div><div class="line">70</div><div class="line">71</div><div class="line">72</div><div class="line">73</div><div class="line">74</div><div class="line">75</div><div class="line">76</div><div class="line">77</div><div class="line">78</div><div class="line">79</div><div class="line">80</div><div class="line">81</div><div class="line">82</div><div class="line">83</div><div class="line">84</div><div class="line">85</div><div class="line">86</div><div class="line">87</div><div class="line">88</div><div class="line">89</div><div class="line">90</div><div class="line">91</div><div class="line">92</div><div class="line">93</div><div class="line">94</div><div class="line">95</div><div class="line">96</div><div class="line">97</div><div class="line">98</div><div class="line">99</div><div class="line">100</div><div class="line">101</div><div class="line">102</div><div class="line">103</div><div class="line">104</div><div class="line">105</div><div class="line">106</div><div class="line">107</div><div class="line">108</div><div class="line">109</div><div class="line">110</div><div class="line">111</div><div class="line">112</div><div class="line">113</div><div class="line">114</div><div class="line">115</div><div class="line">116</div><div class="line">117</div><div class="line">118</div><div class="line">119</div><div class="line">120</div><div class="line">121</div><div class="line">122</div><div class="line">123</div><div class="line">124</div><div class="line">125</div><div class="line">126</div><div class="line">127</div><div class="line">128</div><div class="line">129</div><div class="line">130</div><div class="line">131</div><div class="line">132</div><div class="line">133</div><div class="line">134</div><div class="line">135</div><div class="line">136</div><div class="line">137</div><div class="line">138</div><div class="line">139</div><div class="line">140</div><div class="line">141</div><div class="line">142</div><div class="line">143</div><div class="line">144</div><div class="line">145</div><div class="line">146</div><div class="line">147</div><div class="line">148</div><div class="line">149</div><div class="line">150</div><div class="line">151</div><div class="line">152</div><div class="line">153</div><div class="line">154</div><div class="line">155</div><div class="line">156</div><div class="line">157</div><div class="line">158</div><div class="line">159</div><div class="line">160</div><div class="line">161</div><div class="line">162</div><div class="line">163</div><div class="line">164</div><div class="line">165</div><div class="line">166</div><div class="line">167</div><div class="line">168</div><div class="line">169</div><div class="line">170</div><div class="line">171</div><div class="line">172</div><div class="line">173</div><div class="line">174</div><div class="line">175</div><div class="line">176</div><div class="line">177</div><div class="line">178</div><div class="line">179</div><div class="line">180</div><div class="line">181</div><div class="line">182</div><div class="line">183</div><div class="line">184</div><div class="line">185</div><div class="line">186</div><div class="line">187</div></pre></td><td class="code"><pre><div class="line">/usr/<span class="built_in">local</span>/squid/sbin/squid -z 初始化缓存空间</div><div class="line">/usr/<span class="built_in">local</span>/squid/sbin/squid 启动</div><div class="line">/usr/<span class="built_in">local</span>/squid/sbin/squid -k shutdown 停止</div><div class="line">/usr/<span class="built_in">local</span>/squid/sbin/squid -k reconfigure 重新载入配置文件</div><div class="line">/usr/<span class="built_in">local</span>/squid/sbin/squid -k rotate 轮循日志</div><div class="line"></div><div class="line"><span class="comment">#acl all src 0.0.0.0/0.0.0.0 and http_access allow all选项定义了一个访问控制列表。详细情况参见和Squid软件</span></div><div class="line"><span class="comment">#携带的文档。这里的访问控制列表允许所有对代理服务的访问，因为这里该代理是加速web服务器。</span></div><div class="line">acl all src 0.0.0.0/0.0.0.0                 <span class="comment">#允许所有IP访问</span></div><div class="line">acl manager proto http                 <span class="comment">#manager url协议为http</span></div><div class="line">acl localhost src 127.0.0.1/255.255.255.255  <span class="comment">#允午本机IP</span></div><div class="line">acl to_localhost dst 127.0.0.1                 <span class="comment">#允午目的地址为本机IP</span></div><div class="line">acl Safe_ports port 80                <span class="comment"># 允许安全更新的端口为80</span></div><div class="line">acl CONNECT method CONNECT        <span class="comment">#请求方法以CONNECT</span></div><div class="line">http_access allow all                <span class="comment">#允许所有人使用该代理.因为这里是代理加速web服务器</span></div><div class="line">http_reply_access allow all                <span class="comment">#允许所有客户端使用该代理</span></div><div class="line"></div><div class="line">acl OverConnLimit maxconn 16        <span class="comment">#限制每个IP最大允许16个连接，防止攻击</span></div><div class="line">http_access deny OverConnLimit</div><div class="line"></div><div class="line">icp_access deny all                        <span class="comment">#禁止从邻居服务器缓冲内发送和接收ICP请求.</span></div><div class="line">miss_access allow all                <span class="comment">#允许直接更新请求</span></div><div class="line">ident_lookup_access deny all                                <span class="comment">#禁止lookup检查DNS</span></div><div class="line">http_port 8080 transparent                                <span class="comment">#指定Squid监听浏览器客户请求的端口号。</span></div><div class="line"></div><div class="line">hierarchy_stoplist cgi-bin ?                <span class="comment">#用来强制某些特定的对象不被缓存，主要是处于安全的目的。</span></div><div class="line">acl QUERY urlpath_regex cgi-bin ?</div><div class="line">cache deny QUERY</div><div class="line"></div><div class="line">cache_mem 1 GB        <span class="comment">#这是一个优化选项，增加该内存值有利于缓存。应该注意的是：</span></div><div class="line">                     <span class="comment">#一般来说如果系统有内存，设置该值为(n/)3M。现在是3G 所以这里1G</span></div><div class="line">fqdncache_size 1024        <span class="comment">#FQDN 高速缓存大小</span></div><div class="line">maximum_object_size_in_memory 2 MB        <span class="comment">#允许最大的文件载入内存</span></div><div class="line"></div><div class="line">memory_replacement_policy heap LFUDA  <span class="comment">#动态使用最小的，移出内存cache</span></div><div class="line">cache_replacement_policy heap LFUDA         <span class="comment">#动态使用最小的，移出硬盘cache</span></div><div class="line"></div><div class="line">cache_dir ufs /home/cache 5000 32 512  <span class="comment">#高速缓存目录 ufs 类型 使用的缓冲值最大允午1000MB空间，</span></div><div class="line"><span class="comment">#32个一级目录，512个二级目录</span></div><div class="line"></div><div class="line">max_open_disk_fds 0                                 <span class="comment">#允许最大打开文件数量,0 无限制</span></div><div class="line">minimum_object_size 1 KB                         <span class="comment">#允午最小文件请求体大小</span></div><div class="line">maximum_object_size 20 MB                 <span class="comment">#允午最大文件请求体大小</span></div><div class="line"></div><div class="line">cache_swap_low 90                            <span class="comment">#最小允许使用swap 90%</span></div><div class="line">cache_swap_high 95                            <span class="comment">#最多允许使用swap 95%</span></div><div class="line"></div><div class="line">ipcache_size 2048                                <span class="comment"># IP 地址高速缓存大小 2M</span></div><div class="line">ipcache_low 90                                <span class="comment">#最小允许ipcache使用swap 90%</span></div><div class="line">ipcache_high 95                                  <span class="comment">#最大允许ipcache使用swap 90%</span></div><div class="line"></div><div class="line"></div><div class="line">access_log /var/<span class="built_in">log</span>/squid/access.log squid        <span class="comment">#定义日志存放记录</span></div><div class="line">cache_log /var/<span class="built_in">log</span>/squid/cache.log squid</div><div class="line">cache_store_log none                        <span class="comment">#禁止store日志</span></div><div class="line"></div><div class="line">emulate_httpd_log on        <span class="comment">#将使Squid仿照Web服务器的格式创建访问记录。如果希望使用</span></div><div class="line">                                <span class="comment">#Web访问记录分析程序，就需要设置这个参数。</span></div><div class="line"></div><div class="line">refresh_pattern . 0 20% 4320 override-expire override-lastmod reload-into-ims ignore-reload   <span class="comment">#更新cache规则</span></div><div class="line"></div><div class="line">acl buggy_server url_regex ^http://.... http://          <span class="comment">#只允许http的请求</span></div><div class="line">broken_posts allow buggy_server</div><div class="line"></div><div class="line">acl apache rep_header Server ^Apache                 <span class="comment">#允许apache的编码</span></div><div class="line">broken_vary_encoding allow apache</div><div class="line"></div><div class="line">request_entities off                                        <span class="comment">#禁止非http的标分准请求，防止攻击</span></div><div class="line">header_access header allow all                        <span class="comment">#允许所有的http报头</span></div><div class="line">relaxed_header_parser on                                <span class="comment">#不严格分析http报头.</span></div><div class="line">client_lifetime 120 minute                                <span class="comment">#最大客户连接时间 120分钟</span></div><div class="line"></div><div class="line">cache_mgr sky@test.com                        <span class="comment">#指定当缓冲出现问题时向缓冲管理者发送告警信息的地址信息。</span></div><div class="line"></div><div class="line">cache_effective_user squid                        <span class="comment">#这里以用户squid的身份Squid服务器</span></div><div class="line">cache_effective_group squid</div><div class="line"></div><div class="line">icp_port 0                       <span class="comment">#指定Squid从邻居服务器缓冲内发送和接收ICP请求的端口号。</span></div><div class="line">                     <span class="comment">#这里设置为0是因为这里配置Squid为内部Web服务器的加速器，</span></div><div class="line">                     <span class="comment">#所以不需要使用邻居服务器的缓冲。0是禁用</span></div><div class="line"></div><div class="line"><span class="comment"># cache_peer 设置允许更新缓存的主机，因是本机所以127.0.0.1</span></div><div class="line">cache_peer 127.0.0.1 parent 80 0 no-query default multicast-responder no-netdb-exchange</div><div class="line">cache_peer_domain 127.0.0.1                                 </div><div class="line">hostname_aliases 127.0.0.1</div><div class="line"></div><div class="line">error_directory /usr/share/squid/errors/Simplify_Chinese        <span class="comment">#定义错误路径</span></div><div class="line"></div><div class="line">always_direct allow all                <span class="comment"># cache丢失或不存在是允许所有请求直接转发到原始服务器</span></div><div class="line">ignore_unknown_nameservers on        <span class="comment">#开反DNS查询，当域名地址不相同时候，禁止访问</span></div><div class="line">coredump_dir  /var/<span class="built_in">log</span>/squid                 <span class="comment">#定义dump的目录</span></div><div class="line"></div><div class="line">max_filedesc 2048                <span class="comment">#最大打开的文件描述</span></div><div class="line"></div><div class="line">half_closed_clients off        <span class="comment">#使Squid在当read不再返回数据时立即关闭客户端的连接。</span></div><div class="line">                                <span class="comment">#有时read不再返回数据是由于某些客户关闭TCP的发送数据</span></div><div class="line">                                <span class="comment">#而仍然保持接收数据。而Squid分辨不出TCP半关闭和完全关闭。</span></div><div class="line"></div><div class="line">buffered_logs on <span class="comment">#若打开选项“buffered_logs”可以稍稍提高加速某些对日志文件的写入，该选项主要是实现优化特性。</span></div><div class="line"></div><div class="line"><span class="comment">#防止天涯盗链，转嫁给百度</span></div><div class="line">acl tianya referer_regex -i tianya</div><div class="line">http_access deny tianya</div><div class="line">deny_info  tianya</div><div class="line"><span class="comment">#阻止baidu蜘蛛</span></div><div class="line">acl baidu req_header User-Agent Baiduspider</div><div class="line">http_access deny baidu</div><div class="line"><span class="comment">#限制同一IP客户端的最大连接数</span></div><div class="line">acl OverConnLimit maxconn 128</div><div class="line">http_access deny OverConnLimit</div><div class="line"></div><div class="line"><span class="comment">#防止被人利用为HTTP代理，设置允许访问的IP地址</span></div><div class="line">acl myip dst 222.18.63.37</div><div class="line">http_access deny !myip</div><div class="line"></div><div class="line"><span class="comment">#允许本地管理</span></div><div class="line">acl Manager proto cache_object</div><div class="line">acl Localhost src 127.0.0.1 222.18.63.37</div><div class="line">http_access allow Manager Localhost</div><div class="line">cachemgr_passwd 53034338 all</div><div class="line">http_access deny Manager</div><div class="line"></div><div class="line"><span class="comment">#仅仅允许80端口的代理</span></div><div class="line">acl all src 0.0.0.0/0.0.0.0</div><div class="line">acl Safe_ports port 80 <span class="comment"># http</span></div><div class="line">http_access deny !Safe_ports</div><div class="line">http_access allow all</div><div class="line"></div><div class="line"><span class="comment">#Squid信息设置</span></div><div class="line">visible_hostname happy.swjtu.edu.cn</div><div class="line">cache_mgr  ooopic2008@qq.com</div><div class="line"></div><div class="line"><span class="comment">#基本设置</span></div><div class="line">cache_effective_user squid</div><div class="line">cache_effective_group squid</div><div class="line">tcp_recv_bufsize 65535 bytes</div><div class="line"></div><div class="line"><span class="comment">#2.6的反向代理加速配置</span></div><div class="line">cache_peer 127.0.0.1 parent 80 0 no-query originserver</div><div class="line"></div><div class="line"><span class="comment">#错误文档</span></div><div class="line">error_directory /usr/<span class="built_in">local</span>/squid/share/errors/Simplify_Chinese</div><div class="line"></div><div class="line"><span class="comment">#单台使用，不使用该功能</span></div><div class="line">icp_port 0</div><div class="line"></div><div class="line">hierarchy_stoplist cgi-bin ?</div><div class="line"></div><div class="line">acl QUERY urlpath_regex cgi-bin ? .php .cgi .avi .wmv .rm .ram .mpg .mpeg .zip .exe</div><div class="line">cache deny QUERY</div><div class="line"></div><div class="line">acl apache rep_header Server ^Apache</div><div class="line">broken_vary_encoding allow apache</div><div class="line"></div><div class="line"></div><div class="line">refresh_pattern ^ftp:           1440 20%     10080</div><div class="line">refresh_pattern ^gopher:        1440 0%    1440</div><div class="line">refresh_pattern .             0    20%     4320</div><div class="line"></div><div class="line">cache_store_log none</div><div class="line">pid_filename /usr/<span class="built_in">local</span>/squid/var/logs/squid.pid</div><div class="line">emulate_httpd_log on</div><div class="line">logformat combined %&gt;a %ui %un [%tl] <span class="string">"%rm %ru HTTP/%rv"</span> %Hs %&lt;st <span class="string">"%&#123;Referer&#125;&gt;h"</span> <span class="string">"%&#123;User-Agent&#125;&gt;h"</span> %Ss:%Sh</div><div class="line">cache_log /usr/<span class="built_in">local</span>/squid/var/logs/cache.log</div><div class="line">access_log /usr/<span class="built_in">local</span>/squid/var/logs/access.log combined</div><div class="line">coredump_dir /usr/<span class="built_in">local</span>/squid/var/cache</div><div class="line">cache_dir ufs /usr/<span class="built_in">local</span>/squid/var/cache 10000 16 256</div><div class="line"></div><div class="line">dns_children 32</div><div class="line">hosts_file /etc/hosts</div><div class="line"></div><div class="line">cache_mem 400 MB</div><div class="line">cache_swap_low 90</div><div class="line">cache_swap_high 95</div><div class="line">maximum_object_size 32768 KB</div><div class="line">maximum_object_size_in_memory 4096 KB</div><div class="line">emulate_httpd_log on</div><div class="line"></div><div class="line"></div><div class="line"><span class="comment">#防止盗链</span></div><div class="line">acl picurl url_regex -i .bmp$ .png$ .jpg$ .gif$ .jpeg$</div><div class="line">acl mystie1 referer_regex -i happy.swjtu.edu.cn</div><div class="line">http_access allow mystie1 picurl</div><div class="line">acl nullref referer_regex -i ^$</div><div class="line">http_access allow nullref</div><div class="line">acl hasref referer_regex -i .+</div><div class="line">http_access deny hasref picurl</div></pre></td></tr></table></figure>

	

	

</article>




	<article>
	
		<h1><a href="/2017/10/12/Squid/4. Linux下squid.conf中cache_peer参数详解/">Linux下squid.conf中cache_peer参数详解</a></h1>
	
	<div class="article__infos">
		<span class="article__date">2017-10-12</span><br />
		
		
			<span class="article__tags">
			  	<a class="article__tag-link" href="/tags/Squid/">Squid</a>
			</span>
		
	</div>

	

	
		<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;通过squid.conf配置文件中的cache_peer选项来配置代理服务器阵列，通过其他的选项来控制选择代理伙伴的方法。Cache_peer的使用格式如下：</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;cache_peer hostname type http_port icp_port option</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;共有5个选项可以配置：</p>
<ol>
<li>hostname:指被请求的同级子代理服务器或父代理服务器。可以用主机名或ip地址表示；</li>
<li>type：指明hostname的类型，是同级子代理服务器还是父代理服务器，也即parent（父） 还是 sibling（子）；</li>
<li>http_port：hostname的监听端口；</li>
<li>icp_port：hostname上的ICP监听端口，对于不支持ICP协议的可指定7；</li>
<li>options：可以包含一个或多个关键字。</li>
</ol>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Options可能的关键字有：</p>
<ol>
<li>proxy-only：指明从peer得到的数据在本地不进行缓存，缺省地，squid是要缓存这部分数据的；</li>
<li>weight=n：用于你有多个peer的情况，这时如果多于一个以上的peer拥有你请求的数据时，squid通过计算每个peer的ICP响应时间来 决定其weight的值，然后squid向其中拥有最大weight的peer发出ICP请求。也即weight值越大，其优先级越高。当然你也可以手工 指定其weight值；</li>
<li>no-query：不向该peer发送ICP请求。如果该peer不可用时，可以使用该选项；</li>
<li>Default：有点象路由表中的缺省路由，该peer将被用作最后的尝试手段。当你只有一个父代理服务器并且其不支持ICP协议时，可以使用default和no-query选项让所有请求都发送到该父代理服务器；</li>
<li>login=user:password：当你的父代理服务器要求用户认证时可以使用该选项来进行认证。</li>
</ol>

	

	

</article>





	<span class="different-posts">📖 <a href="/page/6">more posts</a> 📖</span>



	</main>

	<footer class="footer">
	<div class="footer-content">
		
	      <div class="footer__element">
	<p>Hi there, <br />welcome to my Blog glad you found it. Have a look around, will you?</p>
</div>

	    
	      <div class="footer__element">
	<h5>Check out</h5>
	<ul class="footer-links">
		<li class="footer-links__link"><a href="/archives">Archive</a></li>
		
		  <li class="footer-links__link"><a href="/atom.xml">RSS</a></li>
	    
		<li class="footer-links__link"><a href="/about">about page</a></li>
		<li class="footer-links__link"><a href="/tags">Tags</a></li>
		<li class="footer-links__link"><a href="/categories">Categories</a></li>
	</ul>
</div>

	    

		<div class="footer-credit">
			<span>© 2017 失落的乐章 | Powered by <a href="https://hexo.io/">Hexo</a> | Theme <a href="https://github.com/HoverBaum/meilidu-hexo">MeiliDu</a></span>
		</div>

	</div>


</footer>



</body>

</html>
